/**
 * 作业要求：每瓶啤酒2元，3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒？（不允许借啤酒）
 * 思路：利用递归算法，一次性买完，然后递归算出瓶盖和空瓶能换的啤酒数
 */

object Subject1 {

  def dfs(beerNum: Int, bottleNum: Int, capNum: Int): Int = {
    if (beerNum == 0 && bottleNum < 3 && capNum < 5)
      0
    else {
      //空瓶和瓶盖可换到的啤酒数
      val newBeerNum = bottleNum / 3 + capNum / 5
      //当前拥有的空瓶数
      val newBottleNum = bottleNum % 3 + newBeerNum
      //当前拥有的瓶盖数
      val newCapNum = capNum % 5 + newBeerNum
      println(s"beer=$newBeerNum, bottle=$newBottleNum, cap=$newCapNum")

      beerNum + dfs(newBeerNum, newBottleNum, newCapNum)
    }
  }

  def getBottleNum(money: Int): Int = {
    //一瓶啤酒2元
    val num = money / 2;
    //当前有num瓶啤酒，也相当于有num个空瓶和num个瓶盖
    println(s"beer=$num, bottle=$num, cap=$num")
    dfs(num, num, num)
  }

  def main(args: Array[String]): Unit = {
    val money = 100
    println(s"${money}元最多可以喝${getBottleNum(money)}瓶啤酒")
  }
}
